Skip to content

[#67] feat: 기사용 완료 배차 조회 API 구현 및 테스트 격리 강화#68

Merged
Leesowon merged 9 commits intodevfrom
feat/#67
Feb 20, 2026
Merged

[#67] feat: 기사용 완료 배차 조회 API 구현 및 테스트 격리 강화#68
Leesowon merged 9 commits intodevfrom
feat/#67

Conversation

@Leesowon
Copy link
Collaborator

관련 이슈

📌 작업 개요

1. 기능 개선 및 추가

  • 현재 배차 조회 API 개선: GET /api/v1/transporter/current-dispatch

    • 응답에 사무실 전화번호(officeTelNumber) 필드 추가
    • 기사가 배차 중 사무실에 문의할 수 있도록 연락처 제공
  • 완료 배차 조회 API 구현: 기사가 자신의 완료된 배차 내역을 조회할 수 있는 기능

    • GET /api/v1/transporter/completed-dispatches - 목록 조회 (기간별 필터링)
    • GET /api/v1/transporter/completed-dispatches/{dispatchId} - 상세 조회
    • 태그 기능: 결제 방식(현금/후불/완불), 톨게이트 타입(톨포/톨별/하이패스) 한글 표시

2. 테스트 코드 추가 (총 46개 테스트)

  • DispatchRepositoryTest (15개): 배차 거리 조회, 상태 필터링, 완료 배차 조회 등
  • TransporterRepositoryTest (12개): 기사 조회, 자동배차 기사 검색, 거리순 정렬 등
  • DispatcherServiceTest (10개): 배차 할당/취소/완료, 거리 기반 목록 조회 등
  • DispatchConcurrencyTest (4개): 동시성 제어 테스트 (비관적 락, 중복 할당 방지)
  • DispatchOfferAcceptanceTest (5개): 배차 제안 수락 제어 (한 기사당 하나의 ACCEPTED 제안만 허용)

3. 버그 수정

  • LazyInitializationException 해결: 완료 배차 상세 조회 시 Transporter Fetch Join 추가
  • 테스트 격리 문제 해결 (Critical):
    • TestContainers 도입으로 통합 테스트가 로컬 DB에 영향을 주는 문제 해결
    • @BeforeEach deleteAll()이 실제 운영 데이터를 삭제하던 심각한 버그 수정
    • application-test.yml에 이중 안전장치 추가 (잘못된 DB URL 설정)

4. 새로운 DTO

  • CompletedDispatchListItemRes: 완료 배차 목록 항목
  • CompletedDispatchDetailRes: 완료 배차 상세 정보 (태그 포함)

5. Repository 개선

  • findByIdWithTransporter(): Lazy Loading 문제 해결을 위한 Fetch Join 쿼리
  • findDispatchesByDistance(): 거리순 배차 조회 (상태 필터 옵션)
  • findCompletedDispatchesByTransporterIdAndDateRange(): 완료 배차 기간별 조회
  • countAcceptedOffersByTransporter(): 기사별 ACCEPTED 제안 개수 조회
  • findByIdWithLock(): 동시성 제어를 위한 비관적 락 쿼리

✨ 기타 참고 사항

테스트 환경 개선

  • PostGIS 지원 TestContainers 사용 (postgis/postgis:16-3.4)
  • 공간 데이터(ST_MakePoint, ST_SetSRID) 테스트 가능
  • 동시성 테스트: ExecutorService + CountDownLatch + TransactionTemplate 활용

동시성 제어 검증

  • 10명이 동시에 같은 배차 할당 시도 → 1명만 성공
  • 한 기사가 여러 제안 동시 수락 시도 → 1개만 ACCEPTED
  • 비관적 락 타임아웃 테스트 (3초)

✅ 체크리스트

  • PR 템플릿에 맞추어 작성했어요.
  • PR에 적절한 라벨을 선택했어요.
  • 변경 내용에 대한 테스트를 진행했어요. (46개 테스트 추가)
  • application.yml 파일을 수정했다면, Notion에 업로드, github security 수정 및 공유했어요. (application-test.yml만 수정)
  • 로컬 서버에서 정상 동작을 확인했어요.
  • 불필요한 코드는 삭제했어요.

@Leesowon Leesowon self-assigned this Feb 20, 2026
@Leesowon Leesowon added ✨ Feature 새로운 기능을 추가합니다. 🧪 Test 테스트를 추가 및 수정하거나 관련 환경을 구성합니다. labels Feb 20, 2026
@Leesowon Leesowon changed the title Feat/#67 [#67] feat: 기사용 완료 배차 조회 API 구현 및 테스트 격리 강화 Feb 20, 2026
@Leesowon Leesowon merged commit 11bc0e2 into dev Feb 20, 2026
1 check passed
@Leesowon Leesowon deleted the feat/#67 branch February 20, 2026 23:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

✨ Feature 새로운 기능을 추가합니다. 🧪 Test 테스트를 추가 및 수정하거나 관련 환경을 구성합니다.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant